package mensaplan;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;

import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import de.app.badresden.AnimationTouchListener;
import de.app.badresden.R;

public class MensaplanBuilder {

	private boolean updateFlipperOne;
	private AnimationTouchListener touchListener;
	private MensaActivity activity;
	private List<MensaMahlzeit> mahlzeiten;
	
	public MensaplanBuilder(MensaActivity activity, AnimationTouchListener touchListener)
	{
		this.touchListener = touchListener;
		this.activity = activity;
	}
	
	public void ImportMahlzeiten(List<MensaMahlzeit> mahlzeiten) {
		this.mahlzeiten = mahlzeiten;
	}

	public void updateMensaplan(Calendar cal, LinearLayout flipper) {
		
		getActiveFlipper(flipper);		
		ListView listView;
		
		if (updateFlipperOne)
			listView = (ListView)flipper.findViewById(R.id.mensaplan_listview_flipperone);
		else
			listView = (ListView)flipper.findViewById(R.id.mensaplan_listview_flippertwo);			
		
		List<MensaMahlzeit> mahlzeitenForDate = getMahlzeitenForDate(cal);		
		Collections.sort(mahlzeitenForDate, new MensaMahlzeitenSortByPreis());
		
		ArrayAdapter<MensaMahlzeit> listViewAdapter = new MensaMahlzeitArrayAdapter
		(
				activity, 
				mahlzeitenForDate	
		);
		
		listView.setOnItemClickListener(activity);
		listView.setOnTouchListener(touchListener);
		listView.setAdapter(listViewAdapter);	
	}
	
	private List<MensaMahlzeit> getMahlzeitenForDate(Calendar cal) {
		
		List<MensaMahlzeit> mahlzeitenForDate = new ArrayList<MensaMahlzeit>();
		
		for (MensaMahlzeit mahlzeit : mahlzeiten) {
					
			if (compareDates(mahlzeit.getDatum(), cal))
				mahlzeitenForDate.add(mahlzeit);
		}		
		
		if (mahlzeitenForDate.isEmpty()) {
			MensaMahlzeit tmp = new MensaMahlzeit();
			tmp.setBeschreibung(activity.getString(R.string.mensa_noinfo));
			mahlzeitenForDate.add(tmp);
		}
		return mahlzeitenForDate;
	}
	
	private boolean compareDates(Calendar cal1, Calendar cal2) {		
		
		return cal1.getTime().getYear() == cal2.getTime().getYear() && 
			   cal1.getTime().getMonth() == cal2.getTime().getMonth() &&
		       cal1.getTime().getDate() == cal2.getTime().getDate();
	}
	
	private void getActiveFlipper(LinearLayout flipper) {

		try {
			flipper.findViewById(R.id.mensaplan_flipperone).getId();
			updateFlipperOne = true;
			Log.d("badresden app", "flipperone is active");
		}
		catch (Exception e) {
			updateFlipperOne = false;
			Log.d("badresden app", "flippertwo is active");
		}
	}
}
